package com.dao.impl;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import com.dao.CategoriaElementoDAO;
import com.modelo.Categoria_Elemento;

public class ICategoriaElementoDAO implements CategoriaElementoDAO{
	private JdbcTemplate jdbcTemplate;
	public ArrayList<Categoria_Elemento> categorias;
	private Categoria_Elemento categoria;
	private int id_categoria_nueva=0;
	
	@Autowired
	public void setJdbcTemplate(JdbcTemplate jdbcTemplate){
		this.jdbcTemplate=jdbcTemplate;
	}
	
	public List<Categoria_Elemento> mostrar(){
		categorias = new ArrayList<Categoria_Elemento>();
		try{
			String sql ="select * from categoria";
			List<Map<String, Object>> rows = jdbcTemplate.queryForList(sql);
			for (Map row : rows) {
				 Categoria_Elemento categoria = new Categoria_Elemento();
				 categoria.setId(Integer.parseInt(String.valueOf(row.get("id"))));
				 categoria.setNombre_categoria((String)row.get("nombre"));
				 System.out.println("ICategoriaElementoDAO mostrar(): "+categoria.getId()+" "+categoria.getNombre_categoria());
				 categorias.add(categoria);			
			}
		}catch(Exception e){
			System.out.println("ICategoriaElementoDAO: "+e.getMessage());
		}
		return categorias;
	}

	@Override
	public Categoria_Elemento buscarCatParaElem(int id) {
		// TODO Auto-generated method stub
		categoria = new Categoria_Elemento();
		//String sql = "select cat.nombre, cat.id from categoria cat, elemento el where cat.id= el.id_categoria and el.id = ?";
		String sql = "select id, nombre from categoria where id = ?";
		try{
			System.out.println("ICategoria buscarCatParaElem ID enviado: "+id);
			categoria = jdbcTemplate.queryForObject(sql, new Object[]{id}, new RowMapper<Categoria_Elemento>(){
																	public Categoria_Elemento mapRow(ResultSet rs, int numRow)throws SQLException{
																		Categoria_Elemento c = new Categoria_Elemento();
																		c.setId(Integer.parseInt(String.valueOf(rs.getInt("id"))));
																		c.setNombre_categoria(String.valueOf(rs.getString("nombre")));
																		System.out.println("valores de categoira en el dao: "+c.getNombre_categoria()+ " "+c.getId());
																		return c;
																		
																	}
			
													});
		}catch(Exception e){
			System.out.println("ICategoriaElementoDAO buscarCatParaElem: "+e.getMessage());
		}
		
		return categoria;
	}
	
	public Categoria_Elemento buscarCatParaElementoPorIDElem (int idEl) {
		// TODO Auto-generated method stub
		categoria = new Categoria_Elemento();
		//String sql = "select cat.nombre, cat.id from categoria cat, elemento el where cat.id= el.id_categoria and el.id = ?";
		String sql = "select ca.id, ca.nombre from elemento el, categoria ca where el.id_categoria= ca.id and el.id = ?";
		try{
			System.out.println("ICategoria buscarCatParaElementoPorIDElem ID enviado: "+idEl);
			categoria = jdbcTemplate.queryForObject(sql, new Object[]{idEl}, new RowMapper<Categoria_Elemento>(){
																	public Categoria_Elemento mapRow(ResultSet rs, int numRow)throws SQLException{
																		Categoria_Elemento c = new Categoria_Elemento();
																		c.setId(Integer.parseInt(String.valueOf(rs.getInt("id"))));
																		c.setNombre_categoria(String.valueOf(rs.getString("nombre")));
																		System.out.println("valores de categoira en el dao: "+c.getNombre_categoria()+ " "+c.getId());
																		return c;
																		
																	}
			
													});
		}catch(Exception e){
			System.out.println("ICategoriaElementoDAO buscarCatParaElem: "+e.getMessage());
		}
		
		return categoria;
	}

	@Override
	public int insertar(Categoria_Elemento categoria) {
		String sql = "insert into categoria (nombre) values (?)";
		try{
			 id_categoria_nueva=  jdbcTemplate.update(sql, new Object[]{categoria.getNombre_categoria()});
			
		}catch(Exception e){
			id_categoria_nueva = 0;
			System.out.println("Error ICategoriaElementoDAO insertar() "+e.getMessage());
		}
		return id_categoria_nueva;
	}

	@Override
	public boolean eliminar(int id) {
		System.out.println("id que llega para eliminar: "+id);
		String sql = "delete from categoria where id = ?";
		try{
			jdbcTemplate.update(sql, new Object[]{id});
		}catch(Exception e){
			System.out.println("Error eliminando categoria en ICategoriaElementoDAO: "+e.getMessage());
			return false;
		}
		return true;
	}

	@Override
	public Categoria_Elemento actualizar(Categoria_Elemento categoria) {
		// TODO Auto-generated method stub
		String sql = "update categoria set nombre = ? where id = ?";
		Categoria_Elemento ca = new Categoria_Elemento();
		try{
			jdbcTemplate.update(sql, new Object[]{categoria.getNombre_categoria(), categoria.getId()});
			ca = buscarCatParaElem(categoria.getId());
		}catch(Exception e){
			System.out.println("ICategoriaElementoDAO actualizar error: "+e.getMessage());
			
		}
		return ca;
	}
}
